package org.absolutezero.client.di;

import org.absolutezero.client.RefrigeratorApp;
import org.absolutezero.client.RefrigeratorController;
import org.absolutezero.client.presenter.NavigationMenuPresenter;
import org.absolutezero.client.presenter.PageContentPresenter;
import org.absolutezero.client.presenter.PageHeaderPresenter;
import org.absolutezero.client.presenter.RecipesPresenter;
import org.absolutezero.client.presenter.ShelvesPresenter;
import org.absolutezero.client.view.NavigationMenuView;
import org.absolutezero.client.view.PageContentView;
import org.absolutezero.client.view.PageView;
import org.absolutezero.client.view.RecipesView;
import org.absolutezero.client.view.ShelvesView;
import org.absolutezero.shared.RefrigeratorRequestFactory;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.inject.client.GinModules;
import com.google.gwt.inject.client.Ginjector;

@GinModules(InjectorModule.class)
public interface Injector extends Ginjector{

	static final Injector INSTANCE = GWT.create(Injector.class);
	
	/*
	 * Core
	 */
	
	RefrigeratorApp getRefrigeratorApp();
	
	EventBus getEventBus();
	
	
	RefrigeratorController getRefrigeratorController();
	
	EntryPoint getEntryPoint();
	
	
	/*
	 * Views
	 */

	PageContentView getPageContentView();
	
	PageView getPageView();
	
	NavigationMenuView getNavigationMenuView();
	
	RecipesView getRecipesView();
	
	ShelvesView getShelvesView();
	
	
	/*
	 * Presenters
	 */
	
	PageHeaderPresenter getPageHeaderPresenter();
	
	PageContentPresenter getPageContentPresenter();
	
	NavigationMenuPresenter getNavigationMenuPresenter();
	
	RecipesPresenter getRecipesPresenter();
	
	ShelvesPresenter getShelvesPresenter();
	
	/*
	 * Request Factory
	 */
	RefrigeratorRequestFactory getRefrigeratorRequestFactory();
	
	
}
